load("@rules_cc//cc:defs.bzl", "cc_binary")
load("//rust:defs.bzl", "rust_proc_macro")

# buildifier: disable=bzl-visibility
load("//rust/private:transitions.bzl", "alias_with_import_macro_bootstrapping_mode")

alias_with_import_macro_bootstrapping_mode(
    name = "import_macro",
    actual = ":import_macro_impl",
)

rust_proc_macro(
    name = "import_macro_impl",
    srcs = [
        "import.rs",
    ],
    crate_name = "import",
    edition = "2021",
)

alias(
    name = "import",
    actual = select({
        ":use_fake_import_macro": ":fake_import_macro_impl",
        "//conditions:default": ":import_macro_label",
    }),
    visibility = ["//visibility:public"],
)

# This is there to cut the loading-time dependency on the import macro dependencies
# (so users who don't use the macro don't need to add those deps to their WORKSPACE
# file). Bazel in the loading phase doesn't "see" through `label_flag`.
label_flag(
    name = "import_macro_label",
    build_setting_default = "import_macro",
)

config_setting(
    name = "use_fake_import_macro",
    flag_values = {
        "@rules_rust//rust/settings:use_real_import_macro": "False",
    },
)

cc_binary(
    name = "fake_import_macro_impl",
    srcs = ["fake_import_macro_impl.cc"],
)
